/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author allam
 */
@Stateless
public class UtenteFacade extends AbstractFacade<Utente> implements UtenteFacadeLocal {
    
    @PersistenceContext(unitName = "EnterpriseApplication12-13-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }
    public UtenteFacade() {
        super(Utente.class);
    }
    /**
     * Cerca l'oggetto sul Database
     * @param u utente da cercare
     * @return true se utente e' presente sul Database, false altrimenti
     */
    public boolean utenteEsistente(Utente u){
        if (u.getSocial()==null)
            return !(em.createQuery("select object(o) from Utente as o where UPPER(o.username) ='" + u.getUsername().toUpperCase() + "'").getResultList().isEmpty());
        else  return !(em.createQuery("select object(o) from Utente as o where UPPER(o.username) ='" + u.getUsername().toUpperCase()+ "'and UPPER(o.social)='"+u.getSocial().toUpperCase() + "'").getResultList().isEmpty());
    }
    /**
     * Effettua il login
     * @param username String che rappresenta il nome utente
     * @param pwd String che rappresenta la password
     * @param type String che rappresenta il tipo utente
     * @return Utente che ha effettuato il login, null se l'utente non e' presente nel Database o i parametri inseriti non sono corretti
     */
    public Utente login(String username, String pwd,String type){
        List l;
        if (pwd!=null){
             l= em.createQuery("select object(o) from Utente as o where UPPER(o.username) ='" +username.toUpperCase() + "'" + " AND o.password ='" + pwd+ "'").getResultList();
                
        }else {
             l = em.createQuery("select object(o) from Utente as o where UPPER(o.username) ='" +username.toUpperCase() + "'and UPPER(o.social)='"+type.toUpperCase()+"'" ).getResultList();
        
        }if (l.isEmpty())
            return null;
        else
            return (Utente)l.get(0);
    }
    /**
     * Trova tutti gli utenti presenti nel Database usando le stringhe patternUser e patternEMail e tipo e attivo come sottostringhe di ricerca
     * @param patternUser sottostringa da cercare tra tutti gli username degli utenti presenti nel Database
     * @param patternEMail sottostringa da cercare tra tutte le email degli utenti presenti nel Database
     * @param tipo tipo degli utenti da cercare
     * @param attivo tipo degli utenti se attivi oppure no non considerati presenti
     * @return Elenco di utenti, altrimenti restituisce una lista vuota
     */
    public List findSome(String patternUser, String patternEMail, String tipo, String attivo){
        String strSQL = "select object(o) from Utente as o where UPPER(o.username) LIKE '%" + patternUser.toUpperCase() + "%'";
        strSQL += " AND UPPER(o.eMail) LIKE '%" + patternEMail.toUpperCase() + "%'";
        strSQL += " AND UPPER(o.tipo) LIKE '%" + tipo.toUpperCase() + "%'";
        strSQL += " AND UPPER(o.attivo) LIKE '%" + attivo.toUpperCase() + "%'";
        //strSQL += " ORDER BY o.username, o.cognome, o.nome";
        List l = em.createQuery(strSQL).getResultList();
        return l;
    }
    
}
